/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.mechanics;

import com.camachosanchez.bean.Baterias;
import com.camachosanchez.controler.jpa.BateriasJpaController;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import javax.imageio.ImageIO;

/**
 *
 * @author ZULLY
 */
public class Bateria implements Cloneable {
    private int idBateria;
    private int idCategoria;
    private int w_contenedor;
    private int h_contenedor;
    private int origen;
    private ContenedorBateria contenedorBateria;
    private int x;
    private int y;
    private BufferedImage bateria;
    public boolean cadenaPosicion;
    public String codigo;
    public String descripcion;

    public Bateria(ContenedorBateria eje, int idBateria, int w_contenedor, int h_contenedor) {
        try {
            this.contenedorBateria = eje;
            this.x = eje.getX();
            this.y = eje.getY();
            this.idBateria = idBateria;
            this.w_contenedor = w_contenedor;
            this.h_contenedor = h_contenedor;
            InputStream in = getClass().getResourceAsStream("/com/camachosanchez/recursos/bateria.png");
            bateria = ImageIO.read(in);
            this.idCategoria = 0;
            setDescripcion();
        } catch (Exception e) {
            e.printStackTrace();
        }
        cadenaPosicion = false;
    }

    public void setCadenaPosicion(boolean cadenaPosicion) {
        this.cadenaPosicion = cadenaPosicion;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public ContenedorBateria getContenedor() {
        return contenedorBateria;
    }

    public void setContenedor(ContenedorBateria contenedorBateria) {
        this.contenedorBateria = contenedorBateria;
    }

    public int getH_contenedor() {
        return h_contenedor;
    }

    public void setH_contenedor(int h_contenedor) {
        this.h_contenedor = h_contenedor;
    }

    public int getIdBateria() {
        return idBateria;
    }

    public void setIdBateria(int idBateria) {
        this.idBateria = idBateria;
    }

    public int getOrigen() {
        return origen;
    }

    public void setOrigen(int origen) {
        this.origen = origen;
    }

    public int getW_contenedor() {
        return w_contenedor;
    }

    public void setW_contenedor(int w_contenedor) {
        this.w_contenedor = w_contenedor;
    }

    public int getIdCategoria() {
        return idCategoria;
    }

    public void setIdCategoria(int idCategoria) {
        this.idCategoria = idCategoria;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    private void setDescripcion(){
        BateriasJpaController nc = new BateriasJpaController(null);
        Baterias b = nc.findBaterias(idBateria);
        if (b != null) {
            descripcion = "<html>Código: " + b.getCodigo()
                    + "<br>Marca: " + ((b.getIdMarca() == null) ? "" : b.getIdMarca().getNombre())
                    + "<br>N° de placas: " + (b.getNroPlacas());
        }
    }
    
    public boolean estaDentro(Point p) {
//        if(p.x<x || (p.x>(x+ancho)))
        int ancho = contenedorBateria.getAncho();
        int alto = contenedorBateria.getAlto();
        Rectangle r = new Rectangle(x, y, ancho, alto);
        return r.contains(p);
    }

    public void graficar(Graphics2D graphics) {
        try {
            int ancho = contenedorBateria.getAncho();
            int alto = contenedorBateria.getAlto();
            x = x < 20 ? 20 : x;
            y = y < 20 ? 20 : y;
            x = x + ancho + 20 > w_contenedor ? w_contenedor - ancho - 20 : x;
            y = y + alto + 20 > h_contenedor ? h_contenedor - alto - 20 : y;
            graphics.setColor(Color.black);
            Rectangle2D r = new Rectangle2D.Float(x + 1, y + 1, ancho - 2, alto - 2);
            Rectangle2D tr = new Rectangle2D.Double(x + 1, y + 1, ancho - 2, alto - 2);
            TexturePaint tp = new TexturePaint(bateria, tr);
            Paint old = graphics.getPaint();
            graphics.setPaint(tp);
            graphics.fill(r);
            graphics.setPaint(old);
            graphics.setFont(new Font("Arial", Font.PLAIN, 16));
            FontMetrics fontMetrics = graphics.getFontMetrics();
            if (cadenaPosicion) {
                String posicion = contenedorBateria.getPosicion() < 1 ? "R" : "" + contenedorBateria.getPosicion();
                int width = fontMetrics.stringWidth(posicion);
                int height = fontMetrics.getHeight();
                graphics.setColor(Color.white);
                graphics.drawString(posicion, x + ((ancho - width) / 2), y - 3 + ((alto + height) / 2));
            }
            graphics.setColor(Color.black);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public String toString() {
        return "Bateria{" + "posicion=" + contenedorBateria.getPosicion() + ", id=" + idBateria + '}';
    }

    @Override
    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) { // No deberia suceder
            e.printStackTrace();
        }
        return clone;
    }
    
}
